package newx.com.control
{
	import newx.com.control.table.NxTabelPos;

	public interface ITable extends IControl
	{
		/**
		 * 设置表格的宽度，
		 * 每次设置列宽，会将各列的宽度改变为（表格宽/表格列数）
		 * */
		function set width(val:Number):void;
		function get width():Number;
		
		/**
		 * 设置表格高度，
		 * 只影响_pageLinesConut==0时的显示结果
		 */
		function set height(val:Number):void;
		function get height():Number;
		
		function get titleHeight():Number;
		function set titleHeight(value:Number):void;
		
		function get itemHeight():Number;
		function set itemHeight(value:Number):void;
		
		/**表格标题*/
		function get titleLabels():Array;
		function set titleLabels(value:Array):void;
		
		/**标题文本颜色*/
		function get titleLabelColor():uint;
		function set titleLabelColor(value:uint):void;
		
		/**表格每一列的默认列宽*/
		function get columWidthArr():Array;
		function set columWidthArr(value:Array):void;
		
		/**设置不可拖动改变大小的列,重复操作不具有叠加性*/
		function get dragLineLock():Array;
		function set dragLineLock(value:Array):void;
		
		/**表格标题文本的对齐方式（默认TextFormatAlign.CENTER）*/
		function get titleAlign():String;
		function set titleAlign(value:String):void;
		
		/**表格单元格文本的对齐方式（默认TextFormatAlign.LEFT）*/
		function get itemAlign():String;
		function set itemAlign(value:String):void;
		
		/**
		 * 表格当前显示页（从0页开始，默认0），可以通过设置跳转到指定页，
		 * 如果设置值大于表格当前最大页数，则显示最后一页
		 * */
		function get currentPage():int;
		function set currentPage(value:int):void;
		
		/**获取表格当前总页数*/
		function get totalPage():int;
		
		/**单页最大行数*/
		function get pageLinesConut():uint;
		function set pageLinesConut(value:uint):void;
			
		/**当前选中项（默认值null），当设置为默认值时，没有表格行被选中*/
		function get currentPos():NxTabelPos;
		function set currentPos(value:NxTabelPos):void;
		
		/**
		 * 表格当前的二维数组数据(默认new Array()),
		 * 格式如下：label，表示单元格显示的文本；data，表示单元格数据<br>
		 * [
		 * 	[{label:"文本",data:Object},{label:"文本",data:Object},{label:"文本",data:Object}],
		 * 	[{label:"文本",data:Object},{label:"文本",data:Object},{label:"文本",data:Object}]
		 * ]<br>
		 * 当设置为null时，清空表格。
		 * */
		function get dataProvider():Array;
		function set dataProvider(value:Array):void;
		
		/**设置皮肤，例如："aa,bb,cc,dd,ee,ff",5个*/
//		function get skin():String;
//		function set skin(str:String):void;
		
		function get contentSkin():Array;
		function set contentSkin(val:Array):void;
		
		function get titleSkin():String;
		function set titleSkin(val:String):void;
		
		/**
		 * 获取单元格标签值
		 * @param position	单元格位置
		 * @return 单元格文本字符串
		 * 
		 */		
		function getItemFrom(position:NxTabelPos):String;
		
		/**
		 * 获取单元格标签值
		 * @param position	单元格位置
		 * @param pageVal	页数
		 * @return 单元格文本字符串
		 * 
		 */	
		function getItemDataFromEx_Page(position:NxTabelPos,pageVal:int):Object
			
		/**
		 * 设置单元格标签值
		 * @param position	单元格位置
		 * @param val		文本字符串
		 * @return 			是否设置成功
		 * 
		 */		
		function setItemFrom(position:NxTabelPos, val:String):Boolean;

		/**
		 * 获取单元格数据
		 * @param position	单元格位置
		 * @return 单元格数据
		 * 
		 */		
		function getItemDataFrom(position:NxTabelPos):Object;
		
		/**
		 * 设置单元格数据
		 * @param position	单元格位置
		 * @param val		单元格数据
		 * @return 			是否设置成功
		 * 
		 */		
		function setItemDataFrom(position:NxTabelPos, val:Object):Boolean;

		/**
		 * 根据单元格标签值查找单元格的位置，返回按查找顺序存放的单元格位置信息的数组
		 * @param val	单元格字符串
		 * @return 		包含单元格位置信息的数组
		 * 
		 */		
		function getTabelPosByItem(val:String):Array;
		
		/**
		 * 根据特定规则查找其位置
		 * @param func	：	查询条件处理函数
		 * @param data	：	可选查询参数
		 * @return 		:	包含单元格位置
		 * @see<pre>
		 * //例子：查找单元格中包含“aa”字符串并且数据值data不为空的单元格
		 * ...
		 * var tArr:Array	=	getTabelPos(func,"aa");
		 * ...
		 * private function func(itemObj:Object,pVal:Object):Boolean
		 * {
		 * 	//这里的pVal为上门函数中传递的"aa"。
		 * 	if(itemObj.label == pVal && itemObj.data != null) return true;
		 * 	return false;
		 * }</pre>
		 */		
		function getTabelPos(func:Function,data:Object):Array;

		/**
		 * 向表格插入一行
		 * @param item	行标签数组，如：["aa","bb","cc"...]
		 * @param index	指定插入第几行
		 * @param args	为表格填充数据
		 * @see
		 * <pre>
		 * ...
		 * addLineByIndex(["aa","bb","cc"],0,obj1,obj2,obj3);
		 * ...
		 * </pre>
		 */
		function addLineByIndex(item:Array,index:int,... args):void;

		/**
		 * 获取一行（包含行信息）
		 * @param index 行号
		 * @return 
		 * 
		 */
		function getLineByIndex(index:uint):Array;

		/**
		 * 设置/更新一行（包含行信息）
		 * @param item	行标签数组，如：["aa","bb","cc"...]
		 * @param index	行号
		 * @param args	为表格填充数据
		 * @return 
		 * 
		 */
		function setLineByIndex(item:Array, index:int, ... args):Boolean;

		/**
		 * 删除一行（包含行信息）
		 * @param index 行号
		 * 
		 */
		function removeLineByIndex(index:uint):void;
		
//		/**
//		 * 强制绘制表格，耗性能 慎用，通常借助表格的内部运行机制就可以很好的显示，而且性能更好一些。
//		 * 使用建议:表格的绘制总是在需要显示时才进行绘制，如果希望改变绘制时机可以调用此方法
//		 * 例如 初始化、CPU空闲时，或任何使用者觉得应该绘制时，可以调用此方法。
//		 * 
//		 * 但无论何时调用，如果在上次绘制之后，表格没有发生任何变化，都不会进行重新绘制。如果有变化，表格全部重绘，而不是检查应该绘制哪部分。
//		 */
//		function updateDisplay():void;
	}
}